package arraylist;
import jdk.management.resource.ResourceType;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;

/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2022-10-06
 * Time: 21:14
 */
//Arraylist常用方法
public class Test_CommonMethod {
    public static void main(String[] args) {
        /*  增：
            boolean add(E e)                                                 将指定的元素追加到此列表的末尾。
           void add(int index, E element)                                     在此列表中的指定位置插入指定的元素。
           boolean addAll(Collection<? extends E> c)           按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。
           boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中，从指定的位置开始。
           
           删：
           void clear()                                                从列表中删除所有元素。
           E remove(int index)                                          删除该列表中指定位置的元素。
          boolean remove(Object o)                                     从列表中删除指定元素的第一个出现（如果存在）。
         boolean removeAll(Collection<?> c)                             从此列表中删除指定集合中包含的所有元素。
         protected void removeRange(int fromIndex, int toIndex)         从这个列表中删除所有索引在 fromIndex （含）和 toIndex之间的元素。
          
          改：
          E set(int index, E element)                                用指定的元素替换此列表中指定位置的元素。
          
          
          查：
          boolean contains(Object o)                                    如果此列表包含指定的元素，则返回 true 。
         E get(int index)                                                返回此列表中指定位置的元素。
         int indexOf(Object o)                                  回此列表中指定元素的第一次出现的索引，如果此列表不包含元素，则返回-1。
         boolean isEmpty()                                      如果此列表不包含元素，则返回 true 。
         Iterator<E> iterator()                                 以正确的顺序返回该列表中的元素的迭代器。
         int lastIndexOf(Object o)                             返回此列表中指定元素的最后一次出现的索引，如果此列表不包含元素，则返回-1。
         int size()                                              返回此列表中的元素数。
         
         排序：
         void sort(Comparator<? super E> c)             使用提供的 Comparator对此列表进行排序以比较元素。

         变成数组
         Object[] toArray()                       以正确的顺序（从第一个到最后一个元素）返回一个包含此列表中所有元素的数组。
        * */
    
        System.out.println("=========增=========");
        ArrayList<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println(list);
        ArrayList<ArrayList<Integer>> list2=new ArrayList<>();
        list2.add(new ArrayList<>());
        list2.add(new ArrayList<>());
        list2.add(new ArrayList<>());
        //list2.addAll(list); //list2尾插list
        list2.add(2,list); //list2指定位置插入集合list,那么list2必须是更大的集合，类似二位数组的概念
        System.out.println(list2);
        System.out.println("===========删=========");
        Object remove = list.remove(1);  //返回删除指定位置的元素
        System.out.println(remove);
        //list2.clear();
    
        System.out.println("=========改=========");
        Object set = list.set(2, 10);  //返回先前在指定位置的元素
        /*  集合为什么可以直接打印？
         因为println方法底层首先调用 String.valueOf(x) 来获取打印对象的字符串值，value方法又调用String的toString方法*/
        System.out.println(list);
        System.out.println("===============查========");
        Object o = list.get(1); //返回指定位置的元素
        boolean contains = list.contains(3);
        System.out.println(contains); //存在元素返回true
        int i = list.indexOf(3); //返回此列表中指定元素第一次出现的索引，如果此列表不包含该元素，则返回 -1。
        System.out.println(i);
        int j = list2.lastIndexOf(5);  //返回此列表中指定元素最后一次出现的索引，如果此列表不包含该元素，则返回 -1。
        System.out.println(j);
        int size = list.size();
        System.out.println(size); //大小
        boolean empty = list.isEmpty();
        System.out.println(empty); //判空
        //迭代器遍历
        Iterator iterator = list2.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());
        }
        System.out.println();
    
        System.out.println("============排序=========");
        ArrayList<Integer> list3=new ArrayList<>();
        list3.add(123);
        list3.add(232);
        list3.add(12);
        list3.add(453);
        list3.add(43);
        list3.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;  //升序排序
            }
        });
        System.out.println(list3.toString());
    
        System.out.println("=========转成数组=========");
        Object[] objects = list3.toArray();
        System.out.println(Arrays.toString(objects));
    }
}
